home *** CD-ROM | disk | FTP | other *** search
- ; PC y COMPATIBLES
- ; ****************************************
- ; *** TESTDSK.COM v 1.1 / JCE 1992 ***
- ; ****************************************
- ; MAYO 1992
- ; Localiza 1er sector defecuoso,para PROT2
- ;
- ;
-
- CSEG SEGMENT PUBLIC
- ASSUME CS:CSEG, DS:CSEG, SS:CSEG
-
- ORG 100h
-
- TESTDSK_COM:
-
- JMP RUN00
-
- ;
- sect DB 0,0
- drive_num DB 0
- ;
-
- RUN00:
- XOR AX,AX ; por defecto sel. drive A
- MOV BYTE PTR [drive_num],AL
-
- CALL cls
-
- MOV DX,OFFSET MSG0
- CALL printc
-
- MOV DX,OFFSET MSG01
- CALL printc
- sel_drive:
- MOV AH,12
- MOV AL,8
- INT 21H ; Lee teclado borrando buffer
-
- CMP AL,"A"
- JE run0
- CMP AL,"a"
- JE run0
- CMP AL,"B"
- JE drive_B
- CMP AL,"b"
- JNE sel_drive
- drive_B:
- INC BYTE PTR [drive_num] ; selecciona unidad B
- run0:
- MOV DX,OFFSET MSG02
- CALL printc
- MOV AL,BYTE PTR [drive_num]
- ADD AL,65
- MOV DL,AL
- MOV AH,2
- INT 21H ; Escribe A o B sumando 65 a 1 o 0
-
- run:
- MOV DX,OFFSET MSG1
- CALL printc
- CALL RETURN
-
- CALL ANALIZA ; Analiza unidad
-
- MOV DX,OFFSET MSG2
- CALL printc
-
- MOV DX,1 ; primer sector a leer
- MOV BX,OFFSET buffer2 ; dir transferencia en RAM
- MOV CX,3200 ; num. sectores a leer
-
- bucle1:
- PUSH DX
- PUSH DX
- MOV DL,DH
- CALL write_hex
- POP DX
- CALL write_hex
- POP DX
-
- PUSH CX
- MOV CX,1
-
- MOV WORD PTR [sect],DX
-
- CALL REDISK
- MOV AL,BYTE PTR [drive_num]
- INT 26h
- POP DI
- CMP AL,8 ; si el sect no existe ...
- JE bucle2 ; no puede ser el sect buscado!
-
- CALL REDISK
- MOV AL,BYTE PTR [drive_num]
- INT 25h ; lee sectores de disco
- POP DI ; elimina pila
- JC error
-
- bucle2:
- PUSH DX
- MOV DX,OFFSET MSG4
- CALL printc
- POP DX
-
-
- POP CX
- INC DX
- LOOP bucle1
-
- ; terminado test sin encontrar ningun sector defectuoso
-
- MOV DX,OFFSET MSG10
- CALL printc
- CALL RETURN
- JMP start
-
- ;
- retest:
- MOV DX,OFFSET MSG6
- CALL printc
- retest2:
- MOV AH,12
- MOV AL,8
- INT 21H ; Lee teclado borrando buf
-
- CMP AL,"E"
- JE escribe_cod
- CMP AL,"e"
- JE escribe_cod
- CMP AL,"S"
- JE start
- CMP AL,"s"
- JE start
- CMP AL,"N"
- JE retdos
- CMP AL,"n"
- JNE retest2
-
- retdos:
- CALL cls
- MOV DX,OFFSET MSG3
- CALL printc
- INT 20h ; Sale al DOS
-
- error: JMP error2
- ;
-
- start:
- CALL cls
- MOV DX,OFFSET MSG0
- CALL printc
- JMP run0
-
-
- ;
- ; escribe en el sector anterior al defectuoso
- ; un codigo que despues sera leido por PROTEST.COM
- ;
-
- escribe_cod:
-
- CLC
- MOV BX,0
- MOV DX,WORD PTR BUFFER1[BX] ; recupera num sector
- DEC DX ; num sect-1
- MOV CX,1 ; num de sectores
- MOV BX,OFFSET CODIGO ; datos a escribir
-
- CALL REDISK
- CLC
- MOV AL,BYTE PTR [drive_num]
- INT 26H ; escribe en disco
- POP DI ; Limpia STACK
- JC disco_proteg
- MOV DX,OFFSET MSG8
- CALL printc
- JMP retest
-
- disco_proteg:
-
- MOV DX,OFFSET MSG7
- CALL printc
- CALL RETURN
- JMP escribe_cod
-
-
-
- ;
- ; OK. localizado primer sector con defecto
- ;
- error2:
- MOV BX,OFFSET BUFFER1
- MOV WORD PTR DS:[BX],DX
- MOV DX,OFFSET MSG5
- CALL printc
- JMP retest ; vuelve a opciones
-
- ;
- ; Analiza posibles errores en el drive
- ;
-
- ANALIZA:
- MOV CX,1
- MOV DX,0
- MOV BX,OFFSET buffer2
-
- CALL REDISK
- CLC
- MOV AL,BYTE PTR [drive_num]
- INT 25h ; Lee sect 0
- POP DI
-
- JNC ANALIZA2
-
- CMP AL,07
- JE no_formato
-
- CMP AL,02
- JE no_disk
-
- JMP pista_0_error
-
- ANALIZA2:
- CALL REDISK
- CLC
- MOV AL,BYTE PTR [drive_num]
- INT 26h ; Reescribe sect 0
- POP DI
-
- JC disco_protegido
- RET
-
- ;
- ; Errores de disco
- ;
- no_formato:
- MOV DX,OFFSET MSG51
- CALL printc
- JMP RUN
-
- no_disk:
- MOV DX,OFFSET MSG52
- CALL printc
- JMP RUN
-
- pista_0_error:
- MOV DX,OFFSET MSG53
- CALL printc
- JMP RUN
-
- disco_protegido:
- MOV DX,OFFSET MSG54
- CALL printc
- JMP RUN
-
- ; ==============================
- ; Reinicializa sistema diskettes
- ; ==============================
-
- redisk:
- PUSH AX
- PUSH DX
- MOV DL,BYTE PTR [drive_num] ; ?????
- XOR AX,AX
- INT 13H
- POP DX
- POP AX
- RET
-
- ; =========================================
- ; DS:DX, dir del MSG a imprimir en pantalla
- ; =========================================
-
- printc:
- PUSH AX
- MOV AH,9
- INT 21H
- POP AX
- RET
-
- ; ====================================
- ; Espera a que se pulse ENTER y vuelve
- ; ====================================
-
- RETURN:
- PUSH AX
- RETURN2:
- MOV AH,8
- INT 21H
- CMP AL,13
- JNE RETURN2
- POP AX
- RET
-
- ; =================
- ; borra la pantalla
- ; =================
-
- cls:
- MOV AL,0
- MOV CX,0
- MOV DH,24
- MOV DL,79
- MOV BH,7 ; atributo
- MOV AH,6
- INT 10H ; borra
- MOV DX,0
- MOV BH,0
- MOV AH,2
- INT 10H ; locate 0,0
- RET
-
-
-
- ; ==========================================
- ; DL ... Byte a convertir en HEX (P.Norton)
- ; ==========================================
-
- write_hex proc near
- push cx
- push dx
- mov dh,dl
- mov cx,4
- shr dl,cl
- call write_hex_digit
- mov dl,dh
- and dl,0fh
- call write_hex_digit
- pop dx
- pop cx
- ret
- write_hex endp
-
-
- write_hex_digit proc near
- push dx
- cmp dl,10
- jae hex_letter
- add dl,"0"
- jmp short write_digit
- hex_letter:
- add dl,"A"-10
- write_digit:
- call write_char
- pop dx
- ret
- write_hex_digit endp
-
- ;
- write_char proc near
- push ax
- mov ah,2
- int 21h
- pop ax
- ret
- write_char endp
-
-
- ; ---------------------
- ; --- ZONA DE DATOS ---
- ; ---------------------
-
- MSG0: db 10,13," **********************"
- db 10,13," *** TESTDSK.COM v1.1 ***"
- db 10,13," **********************"
- db 10,13," Juan C. Enrique 1992$"
-
- MSG01: db 10,13,10,13,"Selecciona drive (A,B) ?$"
- MSG02: db 10,13,10,13,"* OK. La unidad de disco activa es :$"
- MSG1: db 10,13,10,13,"<<< ATENCION: EL DISCO-LLAVE SERA BORRADO >>>"
- db 10,13,10,13,"Introduzca el disco a testear desprotegido "
- db 10,13,"y pulse 'ENTER' para comenzar el test ..."
- db 10,13,10,13,"$"
-
- MSG2: db "Testeando sector ...$"
- MSG3: db 10,13,10,13,"* TESTDSK terminado!$"
-
- MSG4: db 8,8,8,8,"$$$"
-
- MSG5: db 7,7,7,10,13,"Localizado primer sector defectuoso !$"
-
- MSG6: db 10,13,10,13,10,13
- db " Pulse 'E' para escribir codigo ref.",10,13
- db " 'S' para testear otro diskette",10,13
- db " 'N' para salir al DOS",10,13,"$"
-
- MSG7: db 7,10,13," Desproteja el diskette y pulse ENTER ...$"
- MSG8: db 10,13," Ok, codigo grabado$"
-
- MSG10: db 7,10,13,"Test terminado. NO HAY SECTOR DEFECTUOSO !!!"
- db 10,13, "(Pulse ENTER) ...$"
-
- MSG51: DB 7,10,13,"* Disco de formato NO STANDARD!$"
- MSG52: DB 7,10,13,"* No hay disco en la unidad seleccionada!$"
- MSG53: DB 7,10,13,"* Disco con PISTA-0 defectuosa!$"
- MSG54: DB 7,10,13,"* Disco protegido contra escritura!$"
-
- ;
- ; datos a escribir en sector def-1
- ;
-
- CODIGO: DB "JCE-06091972VIRGO$"
- DB " Sistema de proteccion de software por "
- DB "marca fisica. AUTOR: Juan C.Enrique / 1992 "
- ;
- ; buffers de uso interno
- ;
-
- buffer1 DB 0,0
- buffer2 DB 0
-
-
- CSEG ENDS
- END TESTDSK_COM